package com.editor.controller;

import com.alibaba.fastjson.JSON;
import com.editor.utils.WangEditorImg;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author 19417
 */
@RestController
@RequestMapping("/editor")
public class EditorController {



    private String filepathDir = "src/main/resources/static/article";



    /**
     * 上传文件图片
     *
     * @param file
     * @param response
     * @param request
     * @throws IOException
     */


    @RequestMapping("/upload")
    public void uploadFile(@RequestParam("file") MultipartFile file, HttpServletResponse response, HttpServletRequest request) throws IOException {

        File paht = new File(filepathDir);
        WangEditorImg<String> editorImg = new WangEditorImg();
        List<String> list = new ArrayList<>();
        if (!paht.exists()) {
            paht.mkdirs();
        }


        //旧的文件名称
        String oldfilename = file.getOriginalFilename();
        //获取文件扩展名
        String extname = oldfilename.substring(file.getOriginalFilename().lastIndexOf("."));

        //防止重名
        String newfliename = UUID.randomUUID().toString() + extname;
        //返回是整个文件的大小

        String filepath = filepathDir + "/images/" + newfliename;

        String filepath1 = filepathDir + "/images/";
        File file1 = new File(filepath1);
        if(!file1.exists()){
            file1.mkdirs();
        }

        FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(new File(filepath)));

        StringBuffer requestURL = request.getRequestURL();
        String substring = requestURL.substring(0, requestURL.lastIndexOf("/"));
        String imgpath = substring + "/imageshow?myimage=" + newfliename;
        list.add(imgpath);
        editorImg.setErrno(0);
        editorImg.setData(list);
        //必须有
        PrintWriter out = response.getWriter();
        out.println(JSON.toJSONString(editorImg));
        out.flush();
        out.close();

    }


    /**
     * 图片回显
     *
     * @param request
     * @param response
     * @throws IOException
     */
    @GetMapping("/imageshow")
    public void imageShow(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
        response.setContentType("image/jpeg");
        OutputStream out = response.getOutputStream();
        String imgFileName = request.getParameter("myimage");
        String imgFileNameWithPath = filepathDir + "/images/" + imgFileName;
        try (FileImageInputStream input = new FileImageInputStream(new File(imgFileNameWithPath));
             ByteArrayOutputStream output = new ByteArrayOutputStream();) {
            byte[] buf = new byte[1024];
            int len = -1;
            while ((len = input.read(buf)) != -1) {
                output.write(buf, 0, len);
            }
            byte[] data = output.toByteArray();
            out.write(data);
            out.flush();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }

    @PostMapping("save")
    public String saveArticle(@RequestParam("value") String value) {
        String filename = svaeFile(value);
        return filename;
    }


    public String svaeFile(String value) {

        StringBuilder sb = new StringBuilder();

        sb.append("<!DOCTYPE html>");
        sb.append("<html>");
        sb.append("<head>");
        sb.append("<meta charset=\"utf-8\">");
        sb.append("<title>文章详情</title>");
        sb.append("<meta name=\"renderer\" content=\"webkit\">");
        sb.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">");
        sb.append("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">");
        sb.append("<link rel=\"stylesheet\" href=\"layui/css/layui.css\" media=\"all\">");
        sb.append("</head>");
        sb.append("<body>");
        sb.append("<div style=\"margin: 10px auto;  width: 1200px;\">");
        sb.append(value);
        sb.append("</div>");
        sb.append("<script src=\"lib/layui-v2.5.5/layui.js\" charset=\"utf-8\"></script>");
        sb.append("</body>");
        sb.append("</html>");

        try {
            String uuid = UUID.randomUUID().toString();
            String savePath = filepathDir+"/" + uuid.substring(0,6) + ".html";
            File file = new File(savePath);
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream outputStream = new FileOutputStream(savePath);
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            bufferedWriter.write(sb.toString());
            bufferedWriter.newLine();// 换行
            bufferedWriter.flush();
            bufferedWriter.close();

            return uuid + ".html";
        } catch (IOException e) {

            return null;

        }

    }

    /**
     * 显示文件
     *
     * @param request
     * @param response
     * @throws IOException
     */
    @GetMapping("/fileshow")
    public void fileShow(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
        OutputStream out = response.getOutputStream();
        String imgFileName = request.getParameter("myfile");
        String imgFileNameWithPath = filepathDir+"/" + imgFileName;
        try (FileImageInputStream input = new FileImageInputStream(new File(imgFileNameWithPath));
             ByteArrayOutputStream output = new ByteArrayOutputStream();) {
            byte[] buf = new byte[1024];
            int len = -1;
            while ((len = input.read(buf)) != -1) {
                output.write(buf, 0, len);
            }
            byte[] data = output.toByteArray();
            out.write(data);
            out.flush();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }


}